<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="main">
        <div class="test">你好</div>
    </div>
    <script>
        // 内存泄漏：由于疏忽或错误造成程序未能释放已经不再使用的内存

        // 1. 意外的全局变量
        function fun1(){
            // 一般来说，函数作用域里的变量，会在函数执行完成后销毁，但是这里的a没有使用声明关键字，则a会出现在全局对象window上，这就导致了一个问题，js并不知道什么时候销毁这个全局变量，所以会一直保留。这种问题可以使用严格模式解决
            a = 10;
        }
        fun1();
        console.log(window.a);//10

        // 2. 定时器(如果不及时清除) / 没有及时清除的dom元素
        let main = document.querySelector('.main');
        let timer = setInterval(() => {
            let test = document.querySelector('.test');
            main.removeChild(test);
            test = null;//既然test已经被移除，那就赋值为null
            clearInterval(timer);//既然定时器已经完成了任务，那就清除掉它
        }, 2000);

        // 3. 闭包也会造成内存泄漏的问题
        function fun2(name){
            function fun3(){
                console.log(name);
            }
            return fun3;
        }
        fun2('mika')();
    </script>
</body>
</html>